Related Patents
The invention disclosed herein is related to the invention described in U.S. Pat. No. 5,428,722 by Marsh et al. entitled "Object Oriented Painter Maker", assigned to the same assignee as the invention disclosed herein and incorporated herein by reference.
The invention disclosed herein is related to the invention described in U.S. Pat. No. 5,455,599 by Cabral et al. entitled "Object Oriented Graphic System", assigned to the same assignee as the invention disclosed herein and incorporated herein by reference.
Popular window-type operating systems usually include built-in rendering programs to build the images of graphics primitives for display. The graphics primitives are laid out or rendered in a buffer memory prior to being displayed. There are several options for building an image. A partition in the main memory address space can be allocated as the buffer for rendering a graphic image. The buffer may be an on-screen video memory that displays the graphic while it is being built. Or, the buffer may be of an off screen memory partition that will be swapped into the on-screen video memory partition when it is time to display the graphic. Still further, the buffer may be in a different address space serving as either an on-screen memory or an off screen memory. Direct memory access techniques are employed to exchange data between the main memory and such a buffer.
Hardware accelerators using a customized hardware logic device or a co-processor can improve the performance of a graphics system by implementing graphics operations within the device or co-processor. The hardware accelerator usually is controlled by the host operating system program through a driver program. Host operating systems typically initialize by performing a survey of the hardware that is attached to the system when the system is powered on. A hardware driver table is compiled in the system memory identifying the attached hardware and the associated driver programs. Some operating systems will expand the characterization of hardware graphic accelerators by entering performance characterizations of the attached hardware. Speed and accuracy characterizations can be stored for the various graphic rendering operations available from a particular hardware accelerator. The host operating system will compare the speed and accuracy of the attached hardware accelerator with that of the host rendering programs that are included with the host operating system. This is done for each graphic primitive available in the hardware. The host operating system then decides which graphics primitives should be rendered by the host graphics rendering programs and which by the attached hardware accelerator. Then, when applications call for the drawing of a particular graphic primitive, it is the host operating system that controls whether the hardware accelerator is selected or whether the host rendering program is selected to render it in the video memory.
There are a large number of hardware accelerators currently available. These accelerators speed the rendering of graphics operations by using dedicated hardware logic or co-processors, with little host processor interaction. Hardware accelerators can be simple accelerators or complex co-processors. Simple accelerators typically accelerate rendering operations such as line drawing, filling, bit block transfers, cursors, 3D polygons, etc. Co-processors in addition to rendering accelerations, enable multiprocessing, allowing the co-processor to handle some time consuming operations.
Capabilities of graphics accelerators regarding the support of graphics functions and how graphics functions are performed vary from hardware to hardware. Common graphics capabilities supported by currently available 2D hardware accelerators are: Block Transfer (BitBlt), 2D primitives such as Line, Curve, Rectangle, Polygon, Small Circle, etc., Rectangle and Polygon filling/painting (Solid & Pattern), Clipping, Scrolling (Panning), Cursors, Line Drawing, Color Expansion, Mixing, and Masking. Common graphics capabilities supported by currently available 3D hardware accelerators are: 3D primitives such as Curves, Polygons, etc., Z buffer, Smooth shading, Texture mapping, Alpha blending, and Color Dithering. Other useful graphics acceleration features commonly supported are Wide or Styled borders and Double buffer.
A problem with current operating systems is that they do not provide for enhanced software graphics acceleration methods that become available. Ongoing research on the algorithms for rendering graphics primitives provides a continuing source of improved methods that are more accurate than either the existing host rendering programs or the existing hardware acceleration methods. What is needed is a graphics system that enables an automatic choice between existing host rendering programs, existing hardware acceleration methods, and enhanced software acceleration of the rendering process.